#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
一、基础编程题
1、编写程序，求矩阵a和b相加减, 并输出结果(矩阵a、b均为一维矩阵)
a = 1 2 3 4 5 6, b = 1 2 3 4 5 6
（1）程序分析设计思路（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）

int main()
{
	int a[] = {1,2,3,4,5,6};
	int b[] = {1,2,3,4,5,6};
	int sz = sizeof(a) / sizeof(a[0]);

	int sum1[sz] = { 0 };
	int sum2[sz] = { 0 };
	

	int i = 0;
	for (i = 0; i < sz; i++)
	{
		sum1[i] = a[i] + b[i];
	}
	for (i = 0; i < sz; i++)
	{
		sum2[i] = a[i] -b[i];
	}
	for (i = 0; i < sz; i++)
	{
		printf("%d ", sum1[i]);
	}
	printf("\n");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", sum2[i]);
	}

	return 0;
}

2、编写程序，设计一个函数，完成如下功能：
自定义一个10位数组，并使用选择排序法进行排序，选择排序如下图：
初始态{ 54   45   36   81   72   18   63   27 }
第一趟  18   { 45   36   81   72   54   63   27 }
第二趟  18   27   { 36   81   72   54   63   45 }
第三趟  18   27   36   { 81   72   54   63   45 }
第四趟  18   27   36   45   { 72   54   63   81 }
第五趟  18   27   36   45   54   { 72   63   81 }
第六趟  18   27   36   45   54   63   { 72   81 }
第七趟  18   27   36   45   54   63   72   { 81 }
选择排序（Selection sort）是一种简单直观的排序算法。它的工作原理是：第一次从待排序的数据元素中选出最小（或最大）的一个元素，
存放在序列的起始位置，然后再从剩余的未排序元素中寻找到最小（大）元素，然后放到已排序的序列的末尾。以此类推，
直到全部待排序的数据元素的个数为零。
（1）程序分析设计思路（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）
#define SZ 8

void fdse(int arr[], int sz)
{
	int i, j, tmg = 0;
	for (i = 0; i < sz; i++)
	{
		for (j = 0; j < sz; j++)
		{
			if (arr[i] < arr[j])
			{
				tmg = arr[i];
				arr[i] = arr[j];
				arr[j] = tmg;
			}

		}
	}
	printf("遍历后\n");

	for (int i = 0; i < SZ; i++)
	{
		printf("%d ", arr[i]);
	}
}

int main()
{
	int arr[SZ] = { 0 };	
	int sz=sizeof(arr) / sizeof(arr[0]);
	printf("遍历前\n");
	for (int i = 0; i < SZ; i++) 
	{
		scanf("%d", &arr[i]);
	}
	int sz = sizeof(arr) / sizeof(arr[0]);
	fdse(arr, sz);
	
	return 0;
}


3、编写程序，设计一个函数，完成功能：把某年某月的第几天转换成该年的第几天。
（提示：首先判断所输入的年份是否为闰年。平年2月28天，闰年2月29天。 该年的第几天 = 该年该月之前的各月份天数和 + 该年该月的天数。）
设：
yearday : 存放该年的第几天变量。
year : 存放年变量。
month : 存放月变量。
day : 存放天变量。
month_tab[][] : 存放闰年与非闰年各月的天数。
month_tab[0] : 存放非闰年各月的天数。
month_tab[1] : 存放闰年各月的天数。
leap : 闰年变量。
static int  month_tab[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  
	{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} };
（1）程序分析设计思路（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）
2004 5 23
void zzg( int month_tab2[], int month, int day)
{
	int i , sum = 0;
	for (i = 1; i < month; i++)
	{
		sum += month_tab2[i];
	}
	sum += day;
	printf("该年第%d天\n", sum);

}
void zgq(int month_tab1[], int month, int day)
{
	int i, sum = 0;
	for (i = 1; i < month; i++)
	{
		sum += month_tab1[i];
	}
	sum += day;
	printf("该年第%d天\n", sum);

}

int main()
{
	
	int year = 0;        //year : 存放年变量。
	int month = 0;       //month : 存放月变量。
	int day = 0;         ////day : 存放天变量。


	int  month_tab1[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };    // : 存放非闰年各月的天数。
	int  month_tab2[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };   // : 存放闰年各月的天数。

	scanf("%d %d %d", &year, &month, &day);

	printf("%d年 %d月 第%d天\n", year, month, day);
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)//判断润年
	{
		zzg( month_tab2, month, day);
	}
	else
	{
		zgq( month_tab1, month, day);
	}

	return 0;
}

二：拓展编程题
1、数字加密：输入一个四位数，将该数每一位上的数字加9，然后除以10取余，作为该位上的新数字，
最后将千位和十位上的数字互换，百位和个位上的数字互换，组成加密后的新四位数。例如输入1257，经过加9取余后得到的新数字0146，
在经过两次换位后得到4601。试编写相应程序。
输入输出示例
1257
4601
（1）程序分析设计（使用标准流程图符号完成流程图）

（2）源代码（不能截图，只能复制粘贴）

（3）运行结果截图（只截取相应运行结果截图）
int c = (((a % 10) + 9) % 10);//个位新数字
printf("%d\n", c);
int b = (((((a / 10) % 10) + 9) % 10));//十位新数字
printf("%d\n", b);
int d = (((((a / 100) % 10) + 9) % 10));//百位新数字
printf("%d\n", d);
int e = (((((a / 1000) % 10) + 9) % 10));//千位新数字
printf("%d\n", e);

for (i = 1; i <= 1000; i *= 10)
{

	for (j = i; j <= i; j *= 10)
	{
		sum += (((((a / i) % 10) + 9) % 10)) * j;
		for (c = 0; c < 4; c++)
		{
			add[c] = (((((a / i) % 10) + 9) % 10));

		}
	}

}
0146
 
0123
 
4601
#define SZ 4
void zgq(int add[], int sz)
{
	int tmp , i= 0;
	tmp = add[0];
	add[0] = add[2];
	add[2] = tmp;

	tmp = add[1];
	add[1] = add[3];
	add[3] = tmp;
	for (i = 0; i < sz; i++)
	{
		printf("%d", add[i]);
	}

}
int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 0;
	int ideal = 0;
	
	int add[SZ] = { 0 };
	for (i = 1; i <= 1000; i *= 10)
	{
		int ret = (((((a / i) % 10) + 9) % 10));
		if (ideal < SZ)
		{
			add[ideal] = ret;
			ideal++;
		}
		
	}

	int sz = sizeof(add) / sizeof(add[0]);
	int left = 0;
	int right = sz - 1;
	while (left<right)
	{
		int tmp = add[left];
		add[left] = add[right];
		add[right] = tmp;
		left++;
		right--;
	}
	zgq(add, sz);

	return 0;
}
